package com.hzncc.flowable_diboot.contract.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.diboot.core.binding.query.BindQuery;
import com.diboot.core.binding.query.Comparison;
import com.diboot.core.entity.BaseModel;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;

import jakarta.validation.constraints.NotNull;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 合同审批 Entity 定义
 *
 * @author MyName
 * @version 1.0
 * @date 2024-09-18
 * Copyright © MyCorp
 */

@TableName("mdl_contract_audit")
@Getter
@Setter
@Accessors(chain = true)
public class ContractAudit extends BaseModel {
    private static final long serialVersionUID = 1259520195072390393L;

    /**
     * 租户
     */
    @NotNull(message = "租户不能为空")
    @TableField()
    private String tenantId;

    /**
     * 合同编号
     */
    @NotNull(message = "合同编号不能为空")
    @Length(max = 100, message = "合同编号长度应小于100")
    @BindQuery(comparison = Comparison.LIKE)
    @TableField()
    private String contractCode;

    /**
     * 合同版本号
     */
    @NotNull(message = "合同版本号不能为空")
    @TableField()
    private Long contractVersion;

    /**
     * 客户ID
     */
    @NotNull(message = "客户ID不能为空")
    @Length(max = 100, message = "客户ID长度应小于100")
    @BindQuery(comparison = Comparison.LIKE)
    @TableField()
    private String customerId;

    /**
     * 客户名称
     */
    @BindQuery(comparison = Comparison.LIKE)
    @TableField
    private String customerName;

    /**
     * 负责人
     */
    @NotNull(message = "负责人不能为空")
    @Length(max = 100, message = "负责人长度应小于100")
    @BindQuery(comparison = Comparison.LIKE)
    @TableField()
    private String header;

    /**
     * 销售员
     */
    @NotNull(message = "销售员不能为空")
    @Length(max = 100, message = "销售员长度应小于100")
    @BindQuery(comparison = Comparison.LIKE)
    @TableField()
    private String saler;

    /**
     * 签订部门
     */
    @NotNull(message = "签订部门不能为空")
    @Length(max = 100, message = "签订部门长度应小于100")
    @BindQuery(comparison = Comparison.LIKE)
    @TableField()
    private String signDept;

    /**
     * 签订人
     */
    @NotNull(message = "签订人不能为空")
    @Length(max = 100, message = "签订人长度应小于100")
    @BindQuery(comparison = Comparison.LIKE)
    @TableField()
    private String signer;

    /**
     * 合同类型
     */
    @NotNull(message = "合同类型不能为空")
    @TableField()
    private String contractType;

    /**
     * 评审时间
     */
    @NotNull(message = "评审时间不能为空")
    @TableField()
    private LocalDateTime auditTime;

    /**
     * 产品类型
     */
    @NotNull(message = "产品类型不能为空")
    @TableField()
    private String productType;

    /**
     * 最终用户
     */
    @Length(max = 100, message = "最终用户长度应小于100")
    @BindQuery(comparison = Comparison.LIKE)
    @TableField()
    private String finalUser;

    /**
     * 是否计划部审批
     */
    @NotNull(message = "是否计划部审批不能为空")
    @Length(max = 100, message = "是否计划部审批长度应小于100")
    @BindQuery(comparison = Comparison.LIKE)
    @TableField()
    private String planDeptAudit;

    /**
     * 是否质量部审批
     */
    @NotNull(message = "是否质量部审批不能为空")
    @Length(max = 100, message = "是否质量部审批长度应小于100")
    @BindQuery(comparison = Comparison.LIKE)
    @TableField()
    private String qualityDeptAudit;

    /**
     * 是否国际部审批
     */
    @NotNull(message = "是否国际部审批不能为空")
    @Length(max = 100, message = "是否国际部审批长度应小于100")
    @BindQuery(comparison = Comparison.LIKE)
    @TableField()
    private String internationalDeptAudit;

    /**
     * 是否是中央研究院审批
     */
    @NotNull(message = "是否是中央研究院审批不能为空")
    @Length(max = 100, message = "是否是中央研究院审批长度应小于100")
    @BindQuery(comparison = Comparison.LIKE)
    @TableField()
    private String centerDeptAudit;

    /**
     * 部门审批
     */
    @NotNull(message = "部门审批不能为空")
    @TableField()
    private String deptAudit;

    /**
     * 客户性质
     */
    @NotNull(message = "客户性质不能为空")
    @TableField()
    private String customerType;

    /**
     * 流程实例ID
     */
    @Length(max = 100, message = "流程实例ID长度应小于100")
    @BindQuery(comparison = Comparison.LIKE)
    @TableField()
    private String instanceId;

    /**
     * OA状态
     */
    @TableField()
    private String oaStatus;

    /**
     * OA响应消息
     */
    @Length(max = 100, message = "OA响应消息长度应小于100")
    @BindQuery(comparison = Comparison.LIKE)
    @TableField()
    private String oaMsg;

    /**
     * SAP状态
     */
    @TableField()
    private String sapStatus;

    /**
     * SAP响应消息
     */
    @Length(max = 100, message = "SAP响应消息长度应小于100")
    @BindQuery(comparison = Comparison.LIKE)
    @TableField()
    private String sapMsg;

    /**
     * 系统合同状态
     */
    @Length(max = 100, message = "系统合同状态长度应小于100")
    @BindQuery(comparison = Comparison.LIKE)
    @TableField()
    private String contractStatus;

    /**
     * 审批类型
     */
    @Length(max = 100, message = "审批类型长度应小于100")
    @BindQuery(comparison = Comparison.LIKE)
    @TableField()
    private String auditType;

    /**
     * 业务板块
     */
    @TableField()
    private String businessModel;

    /**
     * 关注人
     */
    @TableField(exist = false)
    private List<String> starUids;

    /**
     * 交货期
     */
    @TableField
    private String deliveryDate;

    /**
     * 结算方式
     */
    @TableField
    private String settlementMethod;

    /**
     * sap 合同号
     */
    @TableField
    private String sapCode;

    /**
     * 销售组织目录ID
     */
    @TableField
    private String salesGroupContentId;

    /**
     * 销售组织
     */
    @TableField
    private String salesOrg;

    /**
     * 账户分配
     */
    @TableField
    private String accountDistribution;

    /**
     * 审核附件
     */
    @TableField
    private String auditAttachment;

    /**
     * 产品组
     */
    @TableField
    private String productGroup;

    /**
     * 分销渠道
     */
    @TableField
    private String distributionChannel;

    /**
     * 销售片区
     */
    @TableField
    private String salesDept;

    /**
     * 国家
     */
    @TableField
    private String country;

    /**
     * 是否审批
     */
    @TableField
    private Boolean isAudit;

    /**
     * 技术要求
     */
    @TableField
    private String technicalRequirements;

    /**
     * 技术要求附件
     */
    @TableField
    private String technicalRequirementsAttachment;

    /**
     * 产品线类型
     */
    @TableField
    private String productLineType;

    /**
     * 质保期
     */
    @TableField
    private String warrantyPeriod;

    /**
     * 其他质保期
     */
    @TableField
    private String otherWarrantyPeriod;

    /**
     * 付款方式
     */
    @TableField
    private String paymentMethod;

    /**
     * 其他付款方式
     */
    @TableField
    private String otherPaymentMethod;

    /**
     * 合同金额
     */
    @TableField
    private String contractAmount;

    /**
     * 产品型号
     */
    @TableField
    private String productModel;

    /*
     * 产品名称
     */
    @TableField
    private String productName;

    /*
     * 合同正本回收状态 0 未回收 1 已回收
     */
    @TableField
    private String contractOriginalRecoveryStatus;
}